# -*- coding: utf-8 -*-
   #root工具
#powered by 夏天

from datetime import datetime as dt
import base64
import os
import sys
import time
import requests
import ctypes
import tkinter
import tkinter.messagebox
tkinter.Tk().withdraw()
#联网公告
url1 = ''
str_notice = requests.get(url1)
str_notice.encoding = 'utf-8'
text_notice = str_notice.text
tkinter.messagebox.showinfo('提示',text_notice)
#设置控制台标题及颜色
ctypes.windll.kernel32.SetConsoleTitleW("Mibox ver1.0 by夏天")
os.system("color 27")
#清屏
def clear():
    os.system("cls")
#更新模块
url = ''
strhtml = requests.get(url)
html = strhtml.text #读取版本号
version_now="1.0" #当前版本
version_file=html
version_text=base64.b64decode(bytes(version_file,'utf-8')) #解密base64
if version_now != version_text.decode(): #判断版本号是否等于现在版本
    print("当前程序不是最新版，即将更新……")
    system_path=os.path.split(os.path.realpath(sys.argv[0]))[0] #取软件运行目录
    update_script="aria2c.exe"+" -c -s 10 -o update_now.zip " #更新脚本运行目录
    update_now_exe=str(system_path)+r'\update_now.zip'
    os.system(update_script) #启动脚本
    if_cmd_2 = os.system(update_script)
    if if_cmd_2 ==0:
        print("已下载成功 Download success！")
        ret=os.path.isfile(update_now_exe)
        if ret!=0:
            print("请运行新程序，程序名为update_now.exe")
            time.sleep(5)
            sys.exit()
        else:
            print("网络不稳定，更新失败！")
            time.sleep(5)
            sys.exit()
#root方式下载
def boot_download():
    print("请选择你的手机型号：")
    print("1.小米11（boot）\n2.小米6（rec）\n3.返回")
    user_input3 = str(input("请输入："))
    if user_input3 == "1":
        print("请稍等……")
        time.sleep(2)
        os.system("cls")
        def xiaomi11():
            return(xiaomi11_download())
        xiaomi11()
    else:
        if user_input3 == "2":
            print("请稍等……")
            time.sleep(2)
            os.system("cls")
            def xiaomi6():
                return(xiaomi6_download())
            xiaomi6()
        else:
            if user_input3 == "3":
                os.system("cls")
                root_tools()
            else:
                print("请输入正确的内容")
                os.system("cls")
                def return_boot():
                    return(boot_download())
                return_boot()
#小米11
def xiaomi11_download():
    system_path3 = os.path.split(os.path.realpath(sys.argv[0]))[0]
    zip_path = str(system_path3)+r'\data\boot\xiaomi11' #7z解压目录
    print("请选择你的系统版本（云端方案）")
    print("1.13.0.6.0\n2.13.0.5.0\n3.13.0.4.0\n4.12.5.16.0")
    user_input5 = str(input("请输入："))
    if user_input5 == "1":
        os.system("cls")
        print("正在下载13.0.6.0的boot.img")
        os.system("aria2c.exe"+" -c -s 10 -o boot.7z ")
        if_cmd_3 = os.system("aria2c.exe"+" -c -s 10 -o boot.7z")
        if if_cmd_3 == 0:
            print("下载成功，正在解压")
            os.system("7z.exe e boot.7z -o"+zip_path+r'\13.0.6.0')
            if_7zip_1 = os.system("7z.exe e boot.7z -o"+zip_path+r'\13.0.6.0')
            if if_7zip_1 == 0:
                os.system("cls")
                print("解压成功，正在返回主界面")
                time.sleep(2)
                os.system("cls")
                def back_1():
                    return(boot_download())
                back_1()
            else:
                input("解压失败，按任意键回到主界面")
                os.system("cls")
                def back_2():
                    return(boot_download())
                back_2()
        else:
            input("下载失败,请按任意键回到主界面")
            os.system("cls")
            def back_3():
                return(boot_download())
            back_3()
    else:
        if user_input5 == "2":
            os.system("cls")
            print("正在下载13.0.5.0的boot.img")
            os.system("aria2c.exe" + " -c -s 10 -o boot.7z ")
            if_cmd_4 = os.system("aria2c.exe" + " -c -s 10 -o boot.7z ")
            if if_cmd_4 == 0:
                print("下载成功，正在解压")
                os.system("7z.exe e boot.7z -o" + zip_path + r'\13.0.5.0')
                if_7zip_2 = os.system("7z.exe e boot.7z -o" + zip_path + r'\13.0.5.0')
                if if_7zip_2 == 0:
                    os.system("cls")
                    print("解压成功，正在返回主界面")
                    os.system("cls")
                    time.sleep(2)
                    def back_3():
                        return (boot_download())
                    back_3()
                else:
                    input("解压失败，按任意键回到主界面")
                    os.system("cls")
                    def back_4():
                        return (boot_download())
                    back_4()
        else:
            if user_input5 == "3":
                os.system("cls")
                print("正在下载13.0.4.0的boot.img")
                os.system("aria2c.exe" + " -c -s 10 -o boot.7z ")
                if_cmd_5 = os.system("aria2c.exe" + " -c -s 10 -o boot.7z ")
                if if_cmd_5 == 0:
                    print("下载成功，正在解压")
                    os.system("7z.exe e boot.7z -o" + zip_path + r'\13.0.4.0')
                    if_7zip_3 = os.system("7z.exe e boot.7z -o" + zip_path + r'\13.0.4.0')
                    if if_7zip_3 == 0:
                        os.system("cls")
                        print("解压成功，正在返回主界面")
                        time.sleep(2)
                        os.system("cls")
                        boot_download()
                    else:
                        input("解压失败，按任意键回到主界面")
                        os.system("cls")
                        boot_download()
            else:
                if user_input5 == "4":
                    os.system("cls")
                    os.system("cls")
                    print("正在下载12.5.16.0的boot.img")
                    os.system("aria2c.exe" + " -c -s 10 -o boot.7z ")
                    if_cmd_6 = os.system("aria2c.exe" + " -c -s 10 -o boot.7z ")
                    if if_cmd_6 == 0:
                        print("下载成功，正在解压")
                        os.system("7z.exe e boot.7z -o" + zip_path + r'\12.5.16.0')
                        if_7zip_4 = os.system("7z.exe e boot.7z -o" + zip_path + r'\12.5.16.0')
                        if if_7zip_4 == 0:
                            os.system("cls")
                            print("解压成功，正在返回主界面")
                            time.sleep(2)
                            os.system("cls")
                            boot_download()
                        else:
                            input("解压失败，按任意键回到主界面")
                            os.system("cls")
                            boot_download()
                else:
                    print("您输入的指令有误，请重新输入")
                    time.sleep(2)
                    os.system("cls")
                    boot_download()
#小米6
def xiaomi6_download():
    system_path4 = os.path.split(os.path.realpath(sys.argv[0]))[0]
    zip_path_2 = str(system_path4)+r'\data\boot\xiaomi11' #7z解压目录
    print("由于小米6有rec，正在下载rec中")
    print("正在下载mi6的rec.img")
    os.system("aria2c.exe" + " -c -s 10 -o rec.img ")
    if_cmd_6 = os.system("aria2c.exe" + " -c -s 10 -o rec.img ")
    if if_cmd_6 == 0:
        print("rec下载成功，2秒后返回主界面")
        time.sleep(2)
        os.system("cls")
        boot_download()
    else:
        print("下载失败，请检查网络环境是否良好")
        time.sleep(2)
        os.system("cls")
        boot_download()
#rec刷入
def rec_flash():
    print("请保证您是否已经安装驱动，如果您已经安装驱动并连接手机，请按照提示进行操作")
    print("打开设置\n进入我的设备\n进入全部参数\n快速点击 7 次MIUI版本\n回到设置主页面\n进入更多设置\n进入开发者选项")
    input("完成后请按任意键继续……")
    system_path_rec1 = os.path.split(os.path.realpath(sys.argv[0]))[0]
    data_path = system_path_rec1 + r'\data'
    os.chdir(data_path)
    os.system("cls")
    print("正在检测设备是否连接")
    if_devices_online_rec = os.system("adb get-state")
    if if_devices_online_rec == 0:
        print("连接成功")
        time.sleep(2)
        clear()
        print("请将rec文件拖入此处")
        rec_path = str(input())
        clear()
        print("正在重启到fastboot")
        os.system("adb reboot bootloader")
        input("当重启到fastboot后，请按任意键继续")
        clear()
        if_rec_flash = os.system("fastboot flash recovery "+rec_path)
        if if_rec_flash == 0:
            print("rec刷入成功，正在启动rec")
            os.system("fastboot oem reboot-recovery")
            print("当进入twrp后，请按照下面的方式进行操作\n点击高级\n点击ADB Sideload\n滑动开始Sideload")
            input("出现进度条后请按任意键继续")
            magisk_zip_path = system_path_rec1+r'\magisk\zip\1.zip'
            if_zip_flash = os.system("adb sideload "+magisk_zip_path)
            if if_zip_flash == 0:
                print("magisk刷入成功，正在重启至手机")
                os.system("adb reboot")
                input("当重启完成后，解锁进入桌面后按任意键继续")
                magisk_apk_path1 = data_path+r'\magisk\apk\1.apk'
                if_apk_install = os.system("adb install -r "+magisk_apk_path1)
                if if_apk_install == 0:
                    print("安装成功！")
                    print("所有程序已经执行完毕！")
                    input("按任意键回到主界面")
                    clear()
                    root_tools()
                else:
                    print("安装失败")
                    print("您可以在酷安上搜索magisk自行安装")
                    input("按任意键回到主界面")
                    clear()
                    root_tools()
            else:
                print("magisk刷入失败")
                input("按任意键回到主界面")
                clear()
                root_tools()
    else:
        print("连接失败")
        input("按任意键回到主界面")
        clear()
        root_tools()
#主界面
def root_tools():
    print("欢迎使用root工具 by：Getime夏天")
    print("请选择root方式")
    print("1.安装驱动\n2.开始root\n3.下载boot包\n0.退出")
    print("如果找不到第三方rec，请选择修补boot")
    user_input = str(input("请选择："))
    if user_input == "1":
        os.system("cls")
        def driver():
            return(drivers_testmode())
        driver()
    else:
        if user_input == "2":
            os.system("cls")
            print("请选择修补方式\n1.ab分区\n2.无ab分区")
            print("mi11请选ab分区，一般新机型都是ab分区")
            user_input_root1 = str(input("请选择："))
            if user_input_root1 == "1":
                print("请稍后……")
                time.sleep(2)
                os.system("cls")
                boot_flash_ab()
            else:
                if user_input_root1 == "2":
                    print("请稍后……")
                    time.sleep(2)
                    os.system("cls")
                    boot_flash_only()
                else:
                    print("请输入正确的指令")
                    time.sleep(2)
                    os.system("cls")
                    root_tools()
        else:
            if user_input == "3":
                os.system("cls")
                boot_download()
            if user_input == "0":
                sys.exit()
# 密钥模块
#安装驱动
def drivers_testmode():
    print("由于驱动签名问题，请在安装驱动前禁用驱动签名，如果您已经禁用了驱动签名，请输入是")
    print("禁用驱动签名教程\nhttps://blog.getime.icu/index.php/2022/02/27/%e5%a6%82%e4%bd%95%e7%a6%81%e7%94%a8%e9%a9%b1%e5%8a%a8%e7%a8%8b%e5%ba%8f%e5%bc%ba%e5%88%b6%e7%ad%be%e5%90%8d/")
    user_input_2 = str(input("请输入："))
    if user_input_2 == "是":
        os.system("cls")
        def drivers_setup():
            return(drivers())
        drivers_setup()
    else:
        os.system("cls")
        def main():
            return(root_tools())
        main()
def drivers():
    unzip_data2 = str(system_path2) + '\\data'
    print("正在下载驱动中，请稍后……")
    os.system("aria2c.exe -c -s 10 -o drivers.zip ")
    if_cmd_3=os.system("aria2c.exe -c -s 10 -o drivers.zip ")
    if if_cmd_3 ==0:
        print("下载成功，正在解压……")
        os.system("unzip.exe -d "+unzip_data2+"drivers.zip")
        if_cmd_4=os.system("unzip.exe -d "+unzip_data2+" drivers.zip")
        if if_cmd_4==0:
            print("解压成功！正在安装中……")
            drivers_path = unzip_data2+'\\drivers'
            os.system("pnputil -i -a "+drivers_path+'\\Google\\Driver\\android_winusb.inf')
            if_drivers_setup_1 = os.system("pnputil -i -a "+drivers_path+'\\Google\\Driver\\android_winusb.inf')
            if if_drivers_setup_1 == 0:
                print("驱动1安装成功")
                os.system("pnputil -i -a " + drivers_path + '\\Microsoft\\Driver\\tetherxp.inf')
                if_drivers_setup_2 = os.system("pnputil -i -a " + drivers_path + '\\Microsoft\\Driver\\tetherxp.inf')
                if if_drivers_setup_2 == 0:
                    print("驱动2安装成功")
                    os.system("pnputil -i -a " + drivers_path + '\\Microsoft\\Driver\\wpdmtphw.inf')
                    if_drivers_setup_3 = os.system("pnputil -i -a " + drivers_path + '\\Microsoft\\Driver\\wpdmtphw.inf')
                    if if_drivers_setup_3 == 0:
                        print("驱动3安装成功")
                        os.system("pnputil -i -a " + drivers_path + '\\Qualcomm\\Driver\\qcser.inf')
                        if_drivers_setup_4 = os.system("pnputil -i -a " + drivers_path + '\\Qualcomm\\Driver\\qcser.inf')
                        if if_drivers_setup_4 == 0:
                            print("驱动4安装成功")
                            time.sleep(2)
                            os.system("cls")
                            print("所有驱动安装全都安装成功！即将返回主界面")
                            time.sleep(2)
                            os.system("cls")
                            def back():
                                return(root_tools())
                            back()
                        else:
                            os.system("cls")
                            print('驱动4安装失败，请检查是否有禁用驱动签名')
                            print("5秒后回到主界面")
                            time.sleep(5)
                            os.system("cls")
                            root_tools()
                    else:
                        os.system("cls")
                        print('驱动3安装失败，请检查是否有禁用驱动签名')
                        print("5秒后回到主界面")
                        time.sleep(5)
                        os.system("cls")
                        root_tools()
                else:
                    os.system("cls")
                    print('[0m驱动2安装失败，请检查是否有禁用驱动签名')
                    print("5秒后回到主界面")
                    time.sleep(5)
                    os.system("cls")
                    root_tools()
            else:
                os.system("cls")
                print('驱动1安装失败，请检查是否有禁用驱动签名')
                print("5秒后回到主界面")
                time.sleep(5)
                os.system("cls")
                root_tools()
#联网检测
system_path2 = os.path.split(os.path.realpath(sys.argv[0]))[0]
testpoint_file = str(system_path2)+'\\data\\testpoint.file'
verify_testpoint_file = os.path.isfile(testpoint_file)
if verify_testpoint_file!=0:
    def b():
        return(password())
    b()
else:
    print("缺失重要组件，正在从服务器下载组件中……")
    os.system("aria2c.exe"+" -c -s 10 -o tools.zip ")
    if_cmd_1 = os.system("aria2c.exe"+" -c -s 10 -o tools.zip ")
    if if_cmd_1==0:
        print("已下载成功，正在解压")
        unzip_data = str(system_path2)+'\\data'
        if_unzip_1 = os.system("unzip.exe -d "+unzip_data+" tools.zip")
        if if_unzip_1 == 0:
            print("解压成功")
            time.sleep(2)
            if verify_testpoint_file!=0:
                print("组件已下载成功！")
                time.sleep(5)
                os.system("cls")
                password()
            else:
                print("下载失败，5s后退出")
                time.sleep(5)
                sys.exit()
        else:
            print("解压成功")
    else:
            print("下载失败，5s后退出")
            time.sleep(5)
            sys.exit()
